Eine Kurve als Funktion eines Parameters:
Tangentenvektor = Ableitung, zeigt in die Bewegungsrichtung:
Bogenlänge = tatsächlich zurückgelegter Weg:
Die Länge von ist eine „Geschwindigkeit“ im Parameterraum – sie hängt von der Parametrisierung ab, nicht von der Form.
Die Krümmung misst, wie stark sich die Tangentenrichtung pro Weglänge dreht:
Der Parameter läuft gleichmäßig – die Punkte im Raum liegen es nicht:
u: 0.0 0.25 0.5 0.75 1.0
●─────────●─────────●─────────●─────────●
ell = cf.ellipse(30.0, 15.0)
print(ell.curvatureAt(0.0), ell.curvatureAt(0.25))
# 0.133 (spitzes Ende) ... 0.0167 (flaches Ende)
positionAt(t) – Standard mode="length": = Bruchteil der BogenlängepositionAt(t, mode="parameter"): = roher Kurvenparameter Bei der Ellipse variiert die Krümmung 8-fach – gleiche Parameterschritte, sehr ungleiche Wege.
Exakt durch eine Formel beschreibbar: Linie, Kreis, Ellipse (die Kegelschnitte). Für Standardkörper reicht das vollständig.
Aber schon eine einfache Operation sprengt die Familie – der Versatz (Offset), jeder Punkt um entlang der Normalen:
kreis = cf.circle(10.0)
print([e.geomType() for e in cf.offset2D(cf.wire(kreis), 3.0).Edges()])
# ['CIRCLE'] – größerer Kreis, R = 13
ell = cf.ellipse(20.0, 10.0)
print([e.geomType() for e in cf.offset2D(cf.wire(ell), 3.0).Edges()])
# ['OFFSET', 'OFFSET', 'OFFSET', 'OFFSET'] – keine Ellipse mehr!

Konstante Krümmung (Kreis) → Versatz bleibt Kreis. Variable Krümmung (Ellipse) → etwas Neues, das keine analytische Formel mehr trägt.
CAD-Systeme brauchen eine Darstellung für beliebige glatte Kurven: Bézier, B-Spline, NURBS.
Nehmen Sie ein Teil Ihres Moduls (die Grundplatte mit Bohrungen) und gehen Sie ihre Kanten durch.
geomType-Werte kommen vor? Wie viele Kreiskanten?radius()-Werte aus. Passen sie zu Ihren Konstruktionsmaßen (Bohrungen, Verrundung)?Hinweise: e.geomType() == "CIRCLE", e.radius()
Wählen Sie die längste Kreiskante und werten Sie Punkt und Tangente bei aus.
Hinweise: max(..., key=...), .positionAt(t), .tangentAt(t)
kreis = cf.circle(20.0)
ell = cf.ellipse(30.0, 15.0)
cf.offset2D(cf.wire(...), 5.0)) und vergleichen Sie die geomType-Werte der Ergebniskanten.w04/ committet und gepusht